#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Math;
using Cephei.QL.Termstructures.Volatility.Swaption;
using Cephei.QL.Models;
using Cephei.QL.Math.Optimization;
namespace Cephei.QL.Legacy.Libormarketmodels
{
    /// <summary> 
	/// ! References:  Stefan Weber, 2005, Efficient Calibration for Libor Market Models, (<http://workshop.mathfinance.de/2005/papers/weber/slides.pdf>)  Damiano Brigo, Fabio Mercurio, Massimo Morini, 2003, Different Covariance Parameterizations of Libor Market Model and Joint Caps/Swaptions Calibration, (<http://www.business.uts.edu.au/qfrc/conferences/qmf2001/Brigo_D.pdf>  \test the correctness is tested using Monte-Carlo Simulation to reproduce swaption npvs, model calibration and exact cap pricing
	/// </summary>
    [Guid ("3F6954A7-924C-4ada-BD84-822F89DBB58B"),ComVisible(true)]
	public interface ILiborForwardModel : Cephei.QL.Models.ICalibratedModel, Cephei.QL.Models.IAffineModel
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// the next two methods are meaningless within this context we might remove them from the AffineModel interface
		/// </summary>
		 Double Discount(Double t);
        /// <summary> 
		/// 
		/// </summary>
		 Double DiscountBond(Double now, Double maturity, Cephei.QL.Math.IArray factors);
        /// <summary> 
		/// 
		/// </summary>
		 Double DiscountBondOption(QL.Option.TypeEnum type, Double strike, Double maturity, Double bondMaturity);
        /// <summary> 
		/// calculating swaption volatility matrix using Rebonatos approx. formula. Be aware that this matrix is valid only for regular fixings and assumes that the fix and floating leg have the same frequency
		/// </summary>
		 Cephei.QL.Termstructures.Volatility.Swaption.ISwaptionVolatilityMatrix GetSwaptionVolatilityMatrix {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double S_0(UInt64 alpha, UInt64 beta);
        /// <summary> 
		/// 
		/// </summary>
		 ILiborForwardModel SetParams(Cephei.QL.Math.IArray p_params);
    }   

    /// <summary> 
	/// ! References:  Stefan Weber, 2005, Efficient Calibration for Libor Market Models, (<http://workshop.mathfinance.de/2005/papers/weber/slides.pdf>)  Damiano Brigo, Fabio Mercurio, Massimo Morini, 2003, Different Covariance Parameterizations of Libor Market Model and Joint Caps/Swaptions Calibration, (<http://www.business.uts.edu.au/qfrc/conferences/qmf2001/Brigo_D.pdf>  \test the correctness is tested using Monte-Carlo Simulation to reproduce swaption npvs, model calibration and exact cap pricing Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ILiborForwardModel_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    ILiborForwardModel Create (Cephei.QL.Legacy.Libormarketmodels.ILiborForwardModelProcess process, Cephei.QL.Legacy.Libormarketmodels.ILmVolatilityModel volaModel, Cephei.QL.Legacy.Libormarketmodels.ILmCorrelationModel corrModel);
    }
}

